package com.dms.modules.cart.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dms.modules.cart.dto.CartItemDTO;
import com.dms.modules.cart.entity.CartItem;

import java.util.List;
import java.util.Map;

/**
 * 购物车服务接口
 */
public interface CartService extends IService<CartItem> {
    
    /**
     * 添加商品到购物车
     * @param userId 用户ID
     * @param productId 商品ID
     * @param skuId SKU ID
     * @param quantity 数量
     */
    void addToCart(Long userId, Long productId, Long skuId, Integer quantity);
    
    /**
     * 更新购物车商品数量
     * @param userId 用户ID
     * @param cartItemId 购物车项ID
     * @param quantity 数量
     */
    void updateQuantity(Long userId, Long cartItemId, Integer quantity);
    
    /**
     * 从购物车移除商品
     * @param userId 用户ID
     * @param cartItemIds 购物车项ID列表
     */
    void removeFromCart(Long userId, List<Long> cartItemIds);
    
    /**
     * 清空购物车
     * @param userId 用户ID
     */
    void clearCart(Long userId);
    
    /**
     * 获取用户的购物车商品列表
     * @param userId 用户ID
     * @return 购物车商品列表
     */
    List<CartItemDTO> getUserCartItems(Long userId);
    
    /**
     * 获取按商家分组的购物车列表
     * @param userId 用户ID
     * @return 按商家分组的购物车列表
     */
    Map<Long, List<CartItemDTO>> getUserCartItemsByMerchant(Long userId);
    
    /**
     * 获取购物车分页列表
     * @param page 分页参数
     * @param userId 用户ID
     * @return 购物车分页列表
     */
    IPage<CartItem> getCartPage(Page<CartItem> page, Long userId);

    /**
     * 更新购物车商品状态
     */
    void updateCartItemsStatus();
} 